﻿using System;

namespace Zive.Color {

    public abstract class ColorSpaceChannelInfo {

        public abstract string Name { get; }
        public abstract double MinimumValue { get; }
        public abstract double MaximumValue { get; }
        public abstract double Range { get; }
        public abstract int IntegerValue { get; }

    }

    public abstract class ColorSpaceChannelInfo<TChannels>: ColorSpaceChannelInfo {

        public abstract TChannels Value { get; }

    }

    public abstract class ColorSpaceChannelInfoCollection {

        public abstract ColorSpaceChannelInfo this[ int index ] { get; }

    }

    public abstract class ColorSpaceInfo {

        public abstract string Name { get; }
        public abstract string Label { get; }

        public abstract int NumberOfChannels { get; }
        public abstract ColorSpaceChannelInfoCollection Channels { get; }

        public abstract Type ColorType { get; }
        public abstract Type ChannelsType { get; }
        public abstract Type ConverterType { get; }

    }

    public abstract class ColorSpaceInfo<TColor>: ColorSpaceInfo {

        public abstract TColor CreateColorInstance( );

    }

}
